/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package app.persistencia;

import app.modelo.Libro;
import app.negocio.LibroNoEncontradoException;
import java.util.List;

/**
 *
 * @author Johann Pando
 */
public interface ItfzLibrosDAO {

    /**
     * M&eacute;todo que recibe un libro y lo da de alta. Devolver&aacute; true
     * si ha podido dar de alta el libro, de lo contrario devolver&aacute false.
     *
     * @param libro
     * @return boolean
     */
    boolean altaLibro(Libro libro);

    /**
     * M&eacute;todo que elimina un libro a trav&eacute;s de su identificador.
     * Devolver&aacute; true si ha podido elimiar el libro, de lo contrario
     * devolver&aacute; false.
     *
     * @param id
     * @return boolean
     */
    boolean eliminarLibro(int id);

    /**
     * M&eacute;todo que devuelve todos los libros almacendados en BD.
     *
     * @return Lista de libros.
     */
    List<Libro> consultarTodos();

    /**
     * Retorna un libro a partir de su isbn.<br><br>Lanza una excepci&oacute;n
     * si no encuentra el libro que habr&aacute; que capturar.
     *
     * @param isbn
     * @return
     * @throws app.negocio.LibroNoEncontradoException
     */
    Libro consultarISBN(String isbn) throws LibroNoEncontradoException;

    /**
     * Devuelve una lista de libros a partir del t&iacute;tulo pasado por
     * par&aacute;metro. <br><br>Lanza una excepci&oacute;n si no encuentra el
     * libro que habr&aacute; que capturar.
     *
     * @param titulo
     * @return Lista de libros
     * @throws app.negocio.LibroNoEncontradoException
     */
    List<Libro> consultarTitulo(String titulo) throws LibroNoEncontradoException;

    /**
     * M&eacute;todo que modifica un libro a partir de su ISBN. Devolver&aacute;
     * true si se ha podido efectuar la operaci&oacute;n, de lo contrario
     * devolver&aacute; false.
     *
     * @param isbn
     * @param precio
     * @return boolean
     */
    boolean modificarPrecio(String isbn, double precio);

    /**
     * M&eacute;todo que recupera a todos los autores (sin repetir) de la BD
     * LIBROS.
     *
     * @return
     */
    List<String> cargarAutores();
    
    
    /**
     * M&eacute;todo que recupera a todos libros de un autor de la BD LIBRO.
     * @param autor
     * @return 
     */
    List<Libro> cargaLibrosPorAutor(String autor);

    /**
     * M&eacute;todo que recupera a todas las editoriales (sin repetir) de la BD
     * LIBROS.
     *
     * @return
     */
    List<String> cargarEditoriales();
    
    /**
     * M&eacute;todo que recupera a todos libros de una editorial de la BD LIBRO.
     * @param editorial
     * @return 
     */
    List<Libro> cargaLibrosPorEditorial(String editorial);
}
